package control.transporte;

import interfasesUnidades.Albergador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JOptionPane;

import excepcionesGenerales.ExcepImposibleEjecutar;
import excepcionesUnidades.ExcepCargaLlena;
import excepcionesUnidades.ExcepNoAlberga;
import excepcionesUnidades.ExcepNoMontable;

import juego.Juego;
import jugadores.Jugador;

import unidades.Unidad;
import vista.vistaTransportes;

public class BotonSubirListener implements ActionListener {
	
	private vistaTransportes vista;
	private Jugador jugadorActual;
	private Object[] unidades;
	private Unidad transporte;
	
	public BotonSubirListener(vistaTransportes vista){
		this.vista = vista;
	}
	public void actionPerformed(ActionEvent arg0) {
		try{
			jugadorActual = Juego.getInstance().getRonda().getTurnoActual().getJugador();
			unidades = vista.getSeleccionadosListaUnidadesEnRegion();
			transporte = vista.getTransporteSeleccionado();	
			if (transporte != null){
				for (int cont = 0; cont < unidades.length; cont++){
					jugadorActual.MontarUnidad((Unidad)unidades[cont], transporte);
					actualizarUnidadesEnTransporte();
				}
			}
		} catch (ExcepImposibleEjecutar e1){
			JOptionPane.showMessageDialog(vista, "No se pudo montar la unidad");
			actualizarUnidadesEnTransporte();
		} catch (ExcepCargaLlena e) {
			actualizarUnidadesEnTransporte();
		} catch (ExcepNoAlberga e) {
			JOptionPane.showMessageDialog(vista, "El transporte no alberga unidades");
			actualizarUnidadesEnTransporte();
		} catch (ExcepNoMontable e) {
			JOptionPane.showMessageDialog(vista, "No se pudo montar la unidad");
			actualizarUnidadesEnTransporte();
		}
	}
	
	private void actualizarUnidadesEnTransporte(){
		List unidades = ((Albergador)transporte).ObtenerUnidades();
		Object[] vectorUnidades = unidades.toArray();
		vista.llenarListaUnidadesEnTransporte(vectorUnidades);
		vista.llenarDatos(transporte);
	}

}
